package string;

import org.junit.Test;

import java.util.*;

/**
 * @Description
 * @Author Firenut
 * @Date 2023-06-24 23:57
 */
public class charCount {
    @Test
    public void test() {
        characterCount("aabbc");
    }

    // 思路：使用hash表存储，然后按照value值进行排序
    public void characterCount(String s) {
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
        }
        List<Map.Entry<Character, Integer>> entryList = new ArrayList<>(map.entrySet());

        Collections.sort(entryList, new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                if (o1.getValue() > o2.getValue()) {
                    // value 大的放前面
                    return -1;
                } else if (o1.getValue().equals(o2.getValue())) {
                    // value相同,key小的放前面
                    // 如果返回一个正数，表示第一个对象应该排在第二个对象的后面
                    return o1.getKey() - o2.getKey();
                } else {
                    return 1;
                }
            }
        });
        for (Map.Entry<Character, Integer> entry : entryList) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
    }
}
